Test tools are used to verify the correct functioning of software and modifications to existing software. Verifying the correctness of software may involve numerous tasks, including the testing of concurrency. Concurrency testing is a core requirement in the software industry and is accomplished through the execution of testcases. A testcase is a set of conditions under which a tester will determine whether an application or software system is working correctly. However, the writing of effective concurrency testcases is outside the programming skills of most testers. The concurrency test requirements instead are often assigned to specialized developers. This leads to other problems, such as the unproductive expense of waiting on a developer to program a testcase, and the risk of losing test requirements in translation.
Traditional programming languages like C, Java, and Perl offer an interface for concurrency testing. Unfortunately this interface requires a steep learning curve to master. The concurrency enablement in these languages is a thread which is the smallest unit of processing that can be scheduled by an operating system. The threading model for these languages is complex due to the number of concepts that have to be mastered, including a deep understanding of the thread model, thread pools, thread life cycle, critical sections, semaphores, synchronizing threads, race conditions, memory usage, etc. During testcase maintenance, the testers further have to depend on the same developers to fix defects and to change test coverage. These costs and risks multiply when the test requirements result in multiple test products, each involving concurrency.